package com.edgar.redis;

import redis.clients.jedis.Jedis;

import java.util.Iterator;

/**
 * @author liqs
 * @version 1.0
 * @date 2021/6/10 9:08
 */
public class RedisDataSetIerator {
    private String dataSetName;
    private Jedis jedis;
    private Iterator<String> iterator;

    RedisDataSetIerator(Jedis jedis, String dataSetName) {
        this.jedis = jedis;
        this.dataSetName = dataSetName;
        iterator = jedis.hkeys(dataSetName).iterator();
    }

    /**
     * 返回 jedis.keys(this.dataSetName).iterator(); 的 hashNext()
     * @return
     */
    public boolean hasNext() {
        return iterator.hasNext();
    }

    /**
     *  获取数据集中的 记录集ID
     * @return
     */
    public String next() {
        return iterator.next();
    }

    public String getRecordSetID() {
        return next();
    }

    /**
     * 根据记录集 ID 获取记录集信息
     * @param recordsetID
     * @return
     */
    public String getRecordSetByID(String recordsetID) {
        return jedis.hget(this.dataSetName, recordsetID);
    }

    /**
     * 当该数据成功存入区块链之后，将 根据记录集 ID 将数据删除
     * @param recordsetID
     */
    public void removeRecordSet(String recordsetID) {
        jedis.hdel(dataSetName, recordsetID);
    }

    /**
     * 获取缓存记录集数量
     * @return
     */
    public int getCacheRecordCount() {
        return jedis.hgetAll(dataSetName).size();
    }

    /**
     * 为数据集插入记录集，数据集结构为 hash 列表，
     * key 即为 数据集名称  value 为 Map<String1, String1>  ----> String1 表示记录集 ID  String2 表示记录集对应的属性值
     * @param recordsetKey
     * @param recordsetValue
     */
    public void setRecordSet(String recordsetKey, String recordsetValue) {
        jedis.hset(dataSetName, recordsetKey, recordsetValue);
    }
}
